# -*- coding: utf-8 -*-
from django.http import HttpResponseRedirect
from django.http import HttpResponse
from django.shortcuts import render_to_response
from django.template import RequestContext
from django.contrib.auth.decorators import login_required
from django.core.urlresolvers import reverse
from apps.amway.forms.empresarios import AddEmpresarioForm, EditEmpresarioForm, AddPrestamoProductoEmpresarioForm
from apps.amway.models import EmpresariosAmway, PrestamosProductos, TipoTransaccion, HistorialInventario, Inventario, PreciosProducto
from datetime import date
################################################################################
################################################################################
################################################################################
@login_required
def agregar_empresarios(request, form_class=AddEmpresarioForm):
    usuario = request.user
    if request.method == 'POST':
        form = form_class(request.POST)        
        if form.is_valid():            
            form.save(usuario)            
            return HttpResponseRedirect(reverse('empresarios'))
    else:
        form = form_class()
    return render_to_response("amway/empresarios/agregar_empresarios.html",
                              { 'form' : form },
                                context_instance=RequestContext(request))
################################################################################
def listar_empresarios(request):
    usuario = request.user
    empresarios = EmpresariosAmway.objects.filter(usuario=usuario).order_by('codigo')
    return render_to_response("amway/empresarios/listar_empresarios.html",
                              { 'empresarios' : empresarios, 'usuario' : usuario },
                                context_instance=RequestContext(request))
################################################################################
@login_required
def editar_empresario(request, empresario_id, form_class=EditEmpresarioForm):
    empresario = EmpresariosAmway.objects.get(pk=empresario_id)
    depto = empresario.departamento.codigo
    ciudad = empresario.ciudad.codigo
    if request.method == 'POST':
        form = form_class(request.POST)
        if form.is_valid():
            form.save(empresario_id, request.user)            
            return HttpResponseRedirect(reverse('clientes'))
    else:
        form = form_class()
        form.datos_empresario(empresario_id)
    return render_to_response("amway/empresarios/editar_empresario.html",
                              { 'form' : form , 'depto' : depto, 'ciudad' : ciudad},
                                context_instance=RequestContext(request))
################################################################################
@login_required
def agregar_prestamo_empresario(request, empresario_id, form_class=AddPrestamoProductoEmpresarioForm):
	empresario = EmpresariosAmway.objects.get(pk=empresario_id)
	usuario = request.user
	if request.method == 'POST':
		form = form_class(request.POST)        
		if form.is_valid():
			form.save(usuario)            
			return HttpResponseRedirect(reverse('empresarios'))
	else:
		form = form_class()
		form.init_empresario(empresario_id)
	return render_to_response("amway/empresarios/agregar_prestamo_empresarios.html",
							   { 'form' : form, 'empresario' : empresario },
							   context_instance=RequestContext(request))
################################################################################
@login_required
def ver_prestamo_empresarios(request):
	usuario = request.user
	prestamos = PrestamosProductos.objects.filter(usuario=usuario)
	return render_to_response("amway/empresarios/ver_prestamo_empresarios.html",
							   { 'prestamos' : prestamos, 'usuario' : usuario },
							   context_instance=RequestContext(request))
################################################################################
@login_required
def devolver_prestamo_empresario(request):
	usuario = request.user
	msg = ''
	msg_list = []
	if request.POST.getlist('devolver_prestamo'):
		prestamos = request.POST.getlist('devolver_prestamo')
		for prestamo in prestamos:
			p = PrestamosProductos.objects.select_related().get(pk=prestamo)
			if p.tipo_prestamo.pk == 4:
				tipo_transaccion = TipoTransaccion.objects.get(pk=5)
				precio_producto = PreciosProducto.objects.get_precio_x_fecha(p.producto, date.today())
				valor_producto = int(precio_producto) * int(p.cantidad)
				
				inventario = Inventario.objects.get(producto__exact=p.producto, usuario=p.empresario.usuario)
				inventario.existencias += int(p.cantidad)
				nuevo_valor = int(inventario.valor) + valor_producto
				inventario.valor = nuevo_valor
				historial_inventario = HistorialInventario.objects.create(fecha=date.today(), inventario=inventario, transaccion=tipo_transaccion, cantidad=p.cantidad, usuario=p.empresario.usuario)
				inventario.save()
				p.delete()
				
			else:
				
				tipo_transaccion = TipoTransaccion.objects.get(pk=6)
				
				try:
					
					inventario = Inventario.objects.get(producto__exact=p.producto, usuario=p.empresario.usuario)
					
					if inventario.existencias <= 0:
						
						msg = u'No tiene existencias de: %s en su Inventario' %p.producto.descripcion
						msg_list.append(msg)
						
					else:
						
						precio = PreciosProducto.objects.get_precio_x_fecha(p.producto, date.today())
						valor = int(precio) * int(p.cantidad)
						valor_actual = int(inventario.valor)
						inventario.existencias -= int(p.cantidad)
						nuevo_valor = valor_actual - valor
						inventario.valor = nuevo_valor
						historial_inventario = HistorialInventario.objects.create(fecha=date.today(), inventario=inventario, transaccion=tipo_transaccion, cantidad=p.cantidad, usuario=p.empresario.usuario)
						inventario.save()
						p.delete()
						
				except Inventario.DoesNotExist:
					
					msg = u'%s no existe en su Inventario' %p.producto.descripcion
					msg_list.append(msg)
				
	
	return render_to_response("amway/empresarios/devolver_prestamo_empresarios.html",
							  {'msg_list' : msg_list},
							   context_instance=RequestContext(request))
################################################################################